package niuke;

/**
 * @author lj
 * @Description: 二分查找-whlie
 * @date 2020-10-26 22:57
 * @QQ 851477108
 */
public class erfz2 {
    /**
     * 二分查找
     * @param n int整型 数组长度
     * @param v int整型 查找值
     * @param a int整型一维数组 有序数组
     * @return int整型
     */
    public int upper_bound_ (int n, int v, int[] a) {
        // write code here
        if (v > a[n - 1]) return n + 1;
        int L = 0,R = n;
        while (L < R){
            int M = L + (R - L)/2;
            if (v > a[M]){
                L = M + 1;
            }else{
                //当v<=a[mid]时，下界应在mid的左侧或mid本身，故缩小右侧边界，right=mid
                R = M;
            }
        }
        return L + 1;
    }
}
